home *** CD-ROM | disk | FTP | other *** search
- OSTAPE TITLE '...OS tape to CMS disk utility'
- MACRO
- &NAME $TXT &MSG,&MSG2
- LCLC &A,&B
- &A SETC '&NAME'.'L'
- &B SETC '*-'.'&NAME'.'-01'
- &NAME DC AL1(&A)
- DC C&MSG
- &A EQU (&B)
- MEND
- SPACE 01
- MACRO
- &NAME $MSG &MSG
- LCLC &A
- AIF ('&MSG' EQ '').BP00
- &A SETC '&MSG'.'-'.'&SYSECT'
- &NAME LA R15,&MSG ==> MESSAGE
- .BP00 ANOP
- BAL R14,LINEDIT ISSUE MESSAGE
- MEND
- SPACE 01
- MACRO
- &NAME $CP &MSG
- LCLC &A
- AIF ('&MSG' EQ '').BP00
- &A SETC '&MSG'.'-'.'&SYSECT'
- &NAME LA R15,&MSG ==> CP COMMAND
- .BP00 ANOP
- BAL R14,DIAG08 ISSUE CP COMMAND
- MEND
- SPACE 01
- MACRO
- &NAME $CMS &MSG
- LCLC &A
- AIF ('&MSG' EQ '').BP00
- &A SETC '&MSG'.'-'.'&SYSECT'
- &NAME LA R1,&MSG ==> CMS COMMAND
- .BP00 ANOP
- BAL R14,SVC202 CALL CMS COMMAND
- MEND
- EJECT
- *****
- ** Columbia University Center for Computer Activities
- **
- ** OSTAPE
- **
- ** Written by Eric M Bitterman on 10/31/84
- **
- ** This program will read thru an OS formatted tape and copy the
- ** files on it to a CMS disk, based on the name in the HDR rec.
- **
- ** To copy this program from tape to a CMS disk, issue the following
- ** commands:
- ** TAPE REW
- ** TAPE FSF
- ** FILEDEF INMOVE TAP1 (RECFM VB LRECL 13000 BLOCK 13000)
- ** FILEDEF OUTMOVE DISK OSTAPE ASSEMBLE A (RECFM V LRECL 100)
- ** MOVEFILE
- ** COPYFILE OSTAPE ASSEMBLE A (RECFM F LRECL 80)
- **
- ** To generate this program just enter the following CMS commands:
- ** ASSEMBLE OSTAPE
- ** LOAD OSTAPE
- ** GENMOD OSTAPE
- ** NUCXLOAD OSTAPE
- **
- ** To install the files, the installation tape must be attached
- ** as 181 and then just enter: OSTAPE and away it goes.
- **
- ** The format of this command is:
- ** OSTAPE COPYALL ( a b d y z )
- ** DUMP fn ft fm ( a b d y )
- ** DVOL1 ( d e )
- ** GENEXEC fn ft fm ( a b d )
- ** LOAD fn ft fm ( b c d )
- ** MODESET ( d )
- ** SCAN fn ft ( b c d )
- ** tapcmd nn ( d )
- ** WVOL1 volser owner ( d e )
- **
- ** tapcmd = BSR BSF ERG FSR FSF REW RUN WTM
- ** nn = number of times this function is to be issued
- ** fn/ft/fm = CMS filename, type and mode
- **
- ** Options
- ** -------
- ** a WTM | NOWTM BLKSIZE {4096 | 800}
- ** b PRINT | NOPRINT TERM DISK
- ** c EOT EOF nn
- ** d TAPn DEN density cuu
- ** e REWIND LEAVE
- ** y APPEND
- ** z INPUT cuu OUTPUT cuu
- **
- *****
- EJECT
- OSTAPE CSECT
- USING OSTAPE,R12
- B 12(,R15) SKIP AROUND LITERAL
- DC CL8'OSTAPE'
- STM R14,R12,12(R13) SAVE ENTRY REGISTERS
- LA R12,00(,R15) FIX BASE REGISTER
- LA R14,WORK ==> OUR SAVE AREA
- USING WORK,R13
- ST R13,04(,R14) .....CHAIN BACKWARD
- ST R14,08(,R13) .....CHAIN FORWARD
- LR R13,R14 ==> OUR SAVE AREA
- *****
- ** Check for any options.
- *****
- CHK4OPT DS 0H
- CLI 08(R1),X'FF' ARE THERE ANY?
- BE NOFUNC ..... No, then load to disk
- LA R15,TAPLIST-10 ==> LIST OF VALID FUNCTIONS
- CHK4OPT1 DS 0H
- LA R15,10(,R15) BUMP TO NEXT ENTRY
- CLI 00(R15),X'FF' END OF LIST?
- BE BADFUNC .....YES, THEN ERROR
- CLC 08(08,R1),00(R15) MATCH?
- BNE CHK4OPT1 ..... NO, THEN CONTINUE
- LH R15,08(,R15) GET DISPL TO PROCESS RTN
- B 00(R15,R12) GO PROCESS OPTION
- $FUNC DS 0H
- MVC TAPECTL1,08(R1) MOVE IN THE FUNCTION
- BAL R14,TAPECOM ISSUE TAPE COMMAND
- BNZ BADTAPE ....., NG, THEN ERROR$TXT
- B RETURN DONE
- EJECT
- $DUMP DS 0H
- $COPY DS 0H
- $DVOL DS 0H
- $GENX DS 0H
- $LOAD DS 0H
- $MODE DS 0H
- $SCAN DS 0H
- $WVOL DS 0H
- $MSG MSG999W WARN USER
- LA R15,04 SET RETURN CODE
- B RETURN DONE
- NOFUNC DS 0H
- *****
- ** Rewind the tape to its loadpoint.
- *****
- BAL R14,TAPEREW REWIND TAPE
- BNZ BADTAPE ..... NG, THEN ERROR MESSAGE
- *****
- ** Read thru the file looking for HDR1 records, extract the CMS
- ** filename and then FSF the tape.
- *****
- READ DS 0H
- BAL R14,RDTAPE READ NEXT TAPE RECORD
- BZ NOTEOF .... OK, SKIP
- CH R15,=H'02' WAS IT END OF TAPE?
- BNE BADTAPE ..... NO, THEN TAPE ERROR
- CLI EOF,X'FF' WAS LAST OPERATION EOF?
- BE BADTAPE .....YES, THEN DONE
- MVI EOF,X'FF' SET EOF FLAG
- B READ
- EJECT
- NOTEOF DS 0H
- MVI EOF,X'00' INIT TO ZERO
- CLC =C'HDR1',BUFFER
- BNE READ ..... NO, THEN CONTINUE
- *****
- ** This is the HDR1 now extract the CMS filename.
- *****
- LA R0,17 MAX LENGTH TO SCAN
- LA R1,BUFFER+04 ==> BEGIN OF FILEID
- LR R2,R1 .....AND HERE TOO
- LA R3,FN ==> WHERE TO STASH VALUE
- LA R4,02 SET NUMBER OF FIELDS TO FIND
- GETVAL DS 0H
- MVC 00(08,R3),SPACE INIT FIELD TO BLANKS
- GETVAL1 DS 0H
- CLI 00(R1),C'.' FOUND?
- BE GETVAL2 .....YES, THEN SKIP
- CLI 00(R1),C' ' FOUND?
- BE GETVAL2 .....YES, THEN SKIP
- LA R1,01(,R1) BUMP TO NEXT CHARACTER
- BCT R0,GETVAL1 CONTINUE
- GETVAL2 DS 0H
- LR R15,R1 COPY OVER
- SR R15,R2 CALC LENGTH OF DATA
- BCTR R15,R0 .....AND SET RELATIVE TO ZERO
- C R15,=F'07' IS FIELD LENGTH OK?
- BNH *+08 .....YES, THEN SKIP
- L R15,=F'07' OTHERWISE SET TO MAX LENGTH
- LTR R15,R15 CHECK TO SEE THIS IS VALID
- BM GETVAL3 .... NG, ITS < 00
- MVC 00(*-*,R3),00(R2) *** EXECUTED INSTRUCTION ***
- EX R15,*-06 MOVE IN VALUE
- B GETVAL4
- GETVAL3 DS 0H
- MVC 00(08,R3),=CL8'EMB'
- GETVAL4 DS 0H
- LA R1,01(,R1) BUMP PAST THE DELIMETER
- LR R2,R1 .....AND COPY HERE
- LA R3,08(,R3) BUMP TO NEXT RESULT FIELD
- BCT R4,GETVAL CONTINUE
- *****
- ** Issue message giving name of this CMS file.
- *****
- MVC S1(08),FN MOVE IN THE FILENAME
- MVC S2(08),FT .....FILETYPE
- MVC S3(02),FM .....AND THE FILEMODE
- $MSG MSG101I ISSUE MESSAGE
- EJECT
- *****
- ** Read in the HDR2 record and extract the LRECL and BLKSIZE.
- *****
- BAL R14,RDTAPE READ NEXT TAPE RECORD
- MVC INLRECL(05),BUFFER+10 MOVE IN THE LRECL
- MVC OUTLRECL(05),BUFFER+10 .....AND HERE TOO
- MVC INBLOCK(05),BUFFER+05 MOVE IN THE BLOCKSIZE
- *****
- ** Now skip over any extra HDRx type records.
- *****
- BAL R14,TAPEFSF FSF
- *****
- ** Issue the FILEDEF and MOVEFILE commands inorder to copy the
- ** program on the tape over to a CMS disk.
- *****
- $CMS FINIS CLOSE ALL FILES
- $CMS INMOVE DEFINE MOVEFILE INPUT
- $CMS OUTMOVE DEFINE MOVEFILE OUTPUT
- $CMS MOVEFILE COPY DATA
- BNZ NGMOVE
- *****
- ** Skip over the EOF file.
- *****
- BAL R14,TAPEFSF
- B READ GET NEXT FILE
- EJECT
- RDTAPE DS 0H
- MVC TAPECTL1,KREAD SETUP TO DO READ
- LA R1,BUFFER ==> TAPE BUFFER
- STCM R1,B'0111',TAPECTL4 .....AND SAVE BUFFER ADDR
- LA R1,80 GET BUFFER LENGTH
- ST R1,TAPECTL5 .....AND SAVE IN PLIST
- ST R14,SAVR14 SAVE RETURN ADDRESS
- BAL R14,TAPECOM ISSUE TAPEIO REQUEST
- L R14,SAVR14 RESTORE RETUN ADDRESS
- L R0,TAPECTL6 GET LENGTH OF DATA READ
- LTR R15,R15 SET CONDITION CODE
- BR R14 RETURN
- NGMOVE DS 0H
- LR R2,R15 SAVE RETURN CODE
- $MSG MSG102E
- LR R15,R2 RESTORE RETURN CODE
- B RETURN DONE
- BADFUNC DS 0H
- $MSG MSG998E ISSUE ERROR MESSAGE
- LA R15,04 SET BAD RETURN CODE
- B RETURN DONE
- BADTAPE DS 0H
- LR R2,R15 COPY RETURN CODE HERE
- SLL R15,01 MULTIPLY BY TWO
- LA R15,TPERRS-02(R15) ==> MESSAGE DISPLACEMENT
- LH R15,00(,R15) GET MESSAGE DISPLACEMENT
- AR R15,R12 ==>MESSAGE TEXT
- $MSG ,
- LR R15,R2 RESTORE RETURN CODE
- RETURN DS 0H
- L R13,04(,R13) ==> PREV SAVE AREA
- L R14,12(,R13) RESTORE RETURN ADDRESS
- LM R0,R12,20(R13) .....AND THESE TOO
- BR R14 ALL DONE
- TAPEFSF DS 0H
- MVC TAPECTL1,KFSF FORWARD SPACE THE TAPE
- B TAPECOM
- TAPEREW DS 0H
- MVC TAPECTL1,KREW REWIND TAPE TO LOAD POINT
- TAPECOM DS 0H
- LA R1,TAPECTL ==> TAPE PLIST
- SVC202 DS 0H
- NOPR R14
- SVC 202
- DC AL4(01)
- LTR R15,R15
- BR R14
- EJECT
- LINEDIT DS 0H
- LINEDIT TEXTA=(R15),RENT=NO,DOT=NO,COMP=NO,DISP=ERRMSG, X
- SUB=(CHARA,S1,CHARA,S2,CHARA,S3), X
- MF=(E,EDWORK)
- MVC S1(SUBLEN),S1-01 SET TO BLANKS
- BR R14 RETURN
- EJECT
- LTORG
- WORK DC 9D'00'
- SAVR14 DC F'00' SAVE REGISTER R14 HERE
- BUFFER DC CL80' ' TAPE BUFFER
- SPACE DC CL8' '
- EOF DC X'00'
- INMOVE DS 0D
- DC CL8'FILEDEF'
- DC CL8'INMOVE'
- DC CL8'TAP1'
- DC CL8'('
- DC CL8'RECFM'
- DC CL8'VB'
- DC CL8'LRECL'
- INLRECL DC CL8'200'
- DC CL8'BLOCK'
- INBLOCK DC CL8'4000'
- DC 8X'FF'
- OUTMOVE DS 0D
- DC CL8'FILEDEF'
- DC CL8'OUTMOVE'
- DC CL8'DISK'
- FN DC CL8' '
- FT DC CL8' '
- FM DC CL8'A1 '
- DC CL8'('
- DC CL8'RECFM'
- DC CL8'VB'
- DC CL8'LRECL'
- OUTLRECL DC CL8'300'
- DC 8X'FF'
- FINIS DS 0D
- DC CL8'FINIS'
- DC CL8'*'
- DC CL8'*'
- DC CL8'*'
- DC 8X'FF'
- MOVEFILE DS 0D
- DC CL8'MOVEFILE'
- DC 8X'FF'
- EJECT
- *****
- ** TAPEIO plist.
- *****
- TAPECTL DS 0D
- DC CL8'TAPEIO'
- TAPECTL1 DC CL8'FSF' FUNCTION
- TAPECTL2 DC CL4'0181' DEVICE ADDRESS
- TAPECTL3 DC BL1'0' MODE
- TAPECTL4 DC AL3(00) BUFFER ADDRESS
- TAPECTL5 DC F'00' BUFFER LENGTH
- TAPECTL6 DC F'00' NUMBE OF BYTES READ
- DC 8X'FF'
- TAPLIST DS 0D
- *****
- ** Standalone functions.
- *****
- KREW DC CL8'REW ',AL2($FUNC-OSTAPE)
- DC CL8'RUN ',AL2($FUNC-OSTAPE)
- DC CL8'ERG ',AL2($FUNC-OSTAPE)
- DC CL8'BSR ',AL2($FUNC-OSTAPE)
- DC CL8'BSF ',AL2($FUNC-OSTAPE)
- DC CL8'FSR ',AL2($FUNC-OSTAPE)
- KFSF DC CL8'FSF ',AL2($FUNC-OSTAPE)
- DC CL8'WTM ',AL2($FUNC-OSTAPE)
- *****
- ** Hi level functions.
- *****
- DC CL8'DUMP ',AL2($DUMP-OSTAPE)
- DC CL8'COPYALL ',AL2($COPY-OSTAPE)
- DC CL8'DVOL1 ',AL2($DVOL-OSTAPE)
- DC CL8'GENEXEC ',AL2($GENX-OSTAPE)
- DC CL8'LOAD ',AL2($LOAD-OSTAPE)
- DC CL8'MODESET ',AL2($MODE-OSTAPE)
- DC CL8'SCAN ',AL2($SCAN-OSTAPE)
- DC CL8'WVOL1 ',AL2($WVOL-OSTAPE)
- DC 2X'FF'
- KREAD DC CL8'READ'
- TPERRS DS 0H
- DC AL2(MSG204I-OSTAPE) RC=01
- DC AL2(MSG205I-OSTAPE) RC=02
- DC AL2(MSG206I-OSTAPE) RC=03
- DC AL2(MSG207I-OSTAPE) RC=04
- DC AL2(MSG208I-OSTAPE) RC=05
- DC AL2(MSG209I-OSTAPE) RC=06
- DC AL2(00) Place holder
- DC AL2(MSG210I-OSTAPE) RC=08
- EJECT
- DC C' '
- S1 DC CL8' '
- S2 DC CL8' '
- S3 DC CL8' '
- SUBLEN EQU (*-S1)
- EDWORK LINEDIT MF=L,MAXSUBS=03
- MSG101I $TXT '........ ........ ..'
- MSG102E $TXT 'MOVEFILE terminated with a non-zero return code'
- MSG204I $TXT 'Invalid function or parameter list'
- MSG205I $TXT 'END-OF-FILE or END-OF-TAPE encountered'
- MSG206I $TXT 'Permanent I/O error'
- MSG207I $TXT 'Illegal device id specified'
- MSG208I $TXT 'Tape not attached'
- MSG209I $TXT 'Tape is file protected'
- MSG210I $TXT 'Incorrect length'
- MSG998E $TXT 'Invalid or omitted OSTAPE function'
- MSG999W $TXT 'Function not implemented'
- PRINT NOGEN
- REGEQU ,
- END
-